package com.zc.core.device;

import com.zc.core.ProtocolStandbyValue;
import com.zc.core.ProtocolSupport;
import com.zc.core.metadata.DeviceMetadata;
import com.zc.core.things.ThingTemplate;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;

import java.util.HashMap;
import java.util.Map;

/**
 * 设备产品型号操作
 *
 * @author zhouhao
 * @since 1.0.0
 */
public interface DeviceProductOperator extends ThingTemplate {

    String getId();

    /**
     * @return 设备产品物模型
     */
    Mono<DeviceMetadata> getMetadata();

    /**
     * 更新设备型号元数据信息
     *
     * @param metadata 元数据信息
     */
    Mono<Boolean> updateMetadata(String metadata);

    /**
     * @return 获取协议支持
     */
    Mono<ProtocolSupport> getProtocol();

    /**
     * @return 获取产品下的所有设备
     */
    Flux<DeviceOperator> getDevices();

    /**
     * @author xiepufeng
     * 设置当前设备的独立协议支持扩展数据,如果没有设置,这使用产品的协议支持扩展数据
     * @param standby 协议支持拓展数据
     */
    Mono<Boolean> updateProtocolStandby(String standby);

    /**
     * @author xiepufeng
     * @return 获取协议支持扩展数据
     */
    Mono<ProtocolStandbyValue> getProtocolStandby();
}
